﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SERIX.Classes;
using System.Drawing;

namespace SERIX
{
    public partial class ProgramacaoMunicipios : Seguranca
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            base.OnLoad(e);

            if (!IsPostBack)
            {
                int anoLiberado = CPlanejamento.AnoProgramacaoCorrente(this.usuAut.Login);
                int ano = DateTime.Now.Year;
                for (int i = ano - 4; i <= ano + 2; i++)
                {
                    string valor = i.ToString();
                    ddlAno.Items.Add(new ListItem(valor, valor, true));
                }
                ddlAno.SelectedValue = anoLiberado.ToString();
            }
        }

        protected void ddlAno_SelectedIndexChanged(object sender, EventArgs e)
        {
            gridView.DataBind();
            int ANO_AIS = Convert.ToInt32(ddlAno.SelectedValue);
            if (!CPlanejamento.AnoLiberadoProgramacao(ANO_AIS, UsuAut.Login))
            {
                gridView.Enabled = false;
                lblmsg.Visible = true;
                lblmsg.Text = "Modificação da Programação bloqueado para esse ano.";
            }
            else
            {
                gridView.Enabled = true;
                lblmsg.Visible = false;
            }
        }

        protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //Isso ocorre devido ao comportamento diferente do OracleCliente com retorno de campos Null, dependendo da versão retorna DbNull ou Null
                object retorno = gridView.DataKeys[e.Row.RowIndex]["idt_pms"];

                if (retorno == DBNull.Value || retorno == null)
                {
                    ((Button)e.Row.FindControl("btnProgramas")).Enabled = false;
                }
                else//Já foi defindo por municipio
                {
                    //Foi definido por programa
                    retorno = gridView.DataKeys[e.Row.RowIndex]["idt_pps"];
                    if (retorno == DBNull.Value || retorno == null)
                    {
                        foreach (TableCell cell in e.Row.Cells)
                        {
                            cell.BackColor = Color.Red;
                        }
                    }
                }
            }
        }

        protected void odsProgramas_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
        {
            string idt_Tec = CTecnicos.PesquisaporCodUsu(usuAut.Codigo, usuAut.Login).Idt_tec;
            e.InputParameters["idt_Tec"] = idt_Tec;
            e.InputParameters["login"] = usuAut.Login;
        }

        protected void btnConfirmar_Click(object sender, EventArgs e)
        {
            Dictionary<int, string> programasInsert = new Dictionary<int, string>();
            List<int> programasRemover = new List<int>();
            string ano_PMS = ddlAno.SelectedValue;
            //int qtdMinima = CPlanejamento.ObterQtdMinimaProgramacao(ano_PMS, usuAut.Login);
            //int qtdDefinida = 0;
            object retorno;
            foreach (GridViewRow row in gridView.Rows)
            {
                TextBox tbx = (TextBox)row.Cells[1].FindControl("tbxValor");

                //if (!string.IsNullOrEmpty(tbx.Text))
                //{
                retorno = gridView.DataKeys[row.RowIndex]["idt_pms"];
                if (retorno != null && retorno != DBNull.Value)//Já existe
                {
                    retorno = gridView.DataKeys[row.RowIndex]["valor_pms"];
                    if (retorno.ToString() == tbx.Text)
                        continue;//Não mexe em quem não teve alteração
                    else//Tenho que remove os dados vinculados primeiro
                        programasRemover.Add(Convert.ToInt32(gridView.DataKeys[row.RowIndex]["idt_pms"]));
                    if (string.IsNullOrEmpty(tbx.Text))
                        continue;
                }
                else if (string.IsNullOrEmpty(tbx.Text))//não mexe caso não foi definido
                    continue;
                //qtdDefinida += Convert.ToInt32(tbx.Text);
                int idt_Mun = Convert.ToInt32(gridView.DataKeys[row.RowIndex]["idt_mun"]);
                programasInsert.Add(idt_Mun, tbx.Text);
            }
            if (Session["confirmar"] == null || (bool)Session["confirmar"] == false)//Coloca uma confirmação na tela
            {
                lblmsg.Text = "Essa operação vai remover os dados definidos por programa, click em confirma novamente para realizar essa operação.";
                Session["confirmar"] = true;
                return;
            }
            //}
            //if (qtdDefinida < qtdMinima)
            //{
            //    lblmsg.Text = string.Format("A quatidade minina de atendimento: {0}", qtdMinima);
            //    lblmsg.Visible = true;
            //    return;
            //}

            string idt_Tec = CTecnicos.PesquisaporCodUsu(usuAut.Codigo, usuAut.Login).Idt_tec;
            CProgramacao.GravarProgramacaoMunicipio(programasInsert, programasRemover, idt_Tec, ano_PMS, usuAut.Login);
            gridView.DataBind();
            lblmsg.Text = "Operação realizada com Sucesso";
            lblmsg.Visible = true;
            Session["confirmar"] = null;//Limpando
        }

        protected void odsProgramasValor_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
        {
            e.InputParameters["idt_pms"] = idt_pms;
            e.InputParameters["login"] = usuAut.Login;
        }

        string idt_pms = "-1";
        protected void btnProgramas_Click(object sender, EventArgs e)
        {
            Button btn = (Button)sender;
            int index = ((GridViewRow)btn.Parent.Parent).RowIndex;
            if (gridView.DataKeys[index]["idt_pms"] != DBNull.Value)
            {
                idt_pms = gridView.DataKeys[index]["idt_pms"].ToString();
                pnlProgramacaoPrograma.Visible = true;
                pnlProgramacaoMunicipio.Visible = false;
                gridViewProgramas.DataBind();
            }
            else
            {
                lblmsg.Text = "Primeiro Grave as informações do planejamento por municipio, confirmando os valores digitados com o botão \"confirmar\".";
                lblmsg.Visible = true;
            }
        }

        protected void btnConfirmarProgramas_Click(object sender, EventArgs e)
        {
            //todas as linhas tem o valor minino, e o ID da programação do municipio
            int qtdMinima = Convert.ToInt32(gridViewProgramas.DataKeys[0]["valor_pms"]);
            int idt_pms = Convert.ToInt32(gridViewProgramas.DataKeys[0]["idt_pms"]);
            int qtdDefinida = 0;
            Dictionary<int, int> programas = new Dictionary<int, int>();
            foreach (GridViewRow row in gridViewProgramas.Rows)
            {
                TextBox tbx = (TextBox)row.Cells[1].FindControl("tbxValor");
                if (!string.IsNullOrEmpty(tbx.Text))
                {
                    int idt_Prog = Convert.ToInt32(gridViewProgramas.DataKeys[row.RowIndex]["idt_prog"]);
                    int qtd_PPS = Convert.ToInt32(tbx.Text);
                    if (qtd_PPS > qtdMinima)
                    {
                        lblmsgProgramas.Text = "A quantidade maxima em um unico programa, não pode ser maior que o definido para o municipio";
                        lblmsgProgramas.Visible = true;
                        return;
                    }
                    qtdDefinida += qtd_PPS;
                    programas.Add(idt_Prog, qtd_PPS);
                }
            }
            if (qtdDefinida < qtdMinima)
            {
                lblmsgProgramas.Text = string.Format("A quatidade minina para o municipio é: {0}", qtdMinima);
                lblmsgProgramas.Visible = true;
                return;
            }
            CProgramacao.GravarProgramacaoPrograma(idt_pms, programas, UsuAut.Login);
            pnlProgramacaoPrograma.Visible = false;
            pnlProgramacaoMunicipio.Visible = true;
            gridView.DataBind();
            lblmsg.Text = "Operação realizada com sucesso";
            lblmsgProgramas.Text = string.Empty;
            lblmsgProgramas.Visible = false;
            lblmsg.Visible = true;
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            pnlProgramacaoPrograma.Visible = false;
            pnlProgramacaoMunicipio.Visible = true;
            lblmsg.Text = string.Empty;
            lblmsgProgramas.Text = string.Empty;
            lblmsgProgramas.Visible = false;
            lblmsg.Visible = true;
        }
    }
}
